package com.nbcio.pm.service;

import com.nbcio.common.mybatis.core.page.PageQuery;
import com.nbcio.common.mybatis.core.page.TableDataInfo;
import com.nbcio.pm.domain.bo.PmProjectMemberBo;
import com.nbcio.pm.domain.vo.PmProjectMemberVo;

import java.util.Collection;
import java.util.List;

/**
 * 项目成员Service接口
 *
 * @author nbacheng
 */
public interface IPmProjectMemberService {

    /**
     * 查询项目成员
     */
    PmProjectMemberVo queryById(Long memberId);

    /**
     * 查询项目成员列表
     */
    TableDataInfo<PmProjectMemberVo> queryPageList(PmProjectMemberBo bo, PageQuery pageQuery);

    /**
     * 查询项目成员列表
     */
    List<PmProjectMemberVo> queryList(PmProjectMemberBo bo);

    /**
     * 新增项目成员
     */
    Boolean insertByBo(PmProjectMemberBo bo);

    /**
     * 修改项目成员
     */
    Boolean updateByBo(PmProjectMemberBo bo);

    /**
     * 校验并批量删除项目成员信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询项目成员列表
     *
     * @param projectId 项目ID
     * @return 成员列表
     */
    List<PmProjectMemberVo> queryByProjectId(Long projectId);

    /**
     * 查询用户参与的项目列表
     *
     * @param userId 用户ID
     * @return 项目列表
     */
    List<PmProjectMemberVo> queryByUserId(Long userId);

    /**
     * 检查用户项目权限
     *
     * @param userId 用户ID
     * @param projectId 项目ID
     * @param permission 权限
     * @return 是否有权限
     */
    Boolean checkProjectPermission(Long userId, Long projectId, String permission);
}
